package br.com.locanet.service.impl;

import javax.persistence.PersistenceException;

import br.com.locanet.bean.impl.EstiloFilme;
import br.com.locanet.dao.database.impl.EstiloFilmeDAO;
import br.com.locanet.exception.ExceptionList;
import br.com.locanet.exception.InvalidAttributeException;
import br.com.locanet.service.AbstractEntityService;

public class EstiloFilmeService extends AbstractEntityService<EstiloFilme, EstiloFilmeDAO> {
	
	@Override
	public void doValidateRequiredFields(EstiloFilme entity)
			throws ExceptionList {
		ExceptionList fieldsInvalidos = new ExceptionList();
		
		if (entity.getNome() == null || entity.getNome().isEmpty() )
			fieldsInvalidos.add(new InvalidAttributeException("nomeNaoInformado"));
		
		if (!fieldsInvalidos.getListaErros().isEmpty()) throw fieldsInvalidos;
	}
	
	@Override
	public void doValidateBusinessRules(EstiloFilme entity)
			throws ExceptionList, PersistenceException, ClassNotFoundException {
		ExceptionList exceptionList = new ExceptionList();
		
		EstiloFilme estiloFilme = new EstiloFilme();
		estiloFilme.setId(entity.getId());
		estiloFilme.setNome(entity.getNome());
		
		validaRepeticaoNome(estiloFilme, exceptionList);
		
		if (!exceptionList.getListaErros().isEmpty()) throw exceptionList;
	}

	private void validaRepeticaoNome(EstiloFilme estiloFilme,
			ExceptionList exceptionList) throws PersistenceException, ClassNotFoundException {
		for (EstiloFilme ef : getEntityDAO().find(estiloFilme)){
			if (ef.getNome().equalsIgnoreCase(estiloFilme.getNome())&&
					(ef==null || !ef.getId().equals(estiloFilme.getId()))){
				exceptionList.add(new InvalidAttributeException("nomeJaCadastrado"));
				break;
			}
		}
	}

}
